home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / SourceCode / Registration / Decoder.m < prev    next >
Text File  |  1992-12-19  |  3KB  |  115 lines

  1. /*
  2.  * (C) 1992 Simson Garfinkel and Associates, Inc.
  3.  *
  4.  * NeXTSTEP developers may freely use and redistribute this software as long
  5.  * as credit is given to Simson Garfinkel and Associates.
  6.  *
  7.  * EXPORT RESTRICTIONS:
  8.  *
  9.  * You may not ship the source-code module des.c outside of the US or canada.
  10.  *
  11.  * You may ship a program which uses the des.o compiled module outside of the
  12.  * United States to any type T or type V country as long as you do not provide
  13.  * cryptographic services to the user in your program and you clearly
  14.  * declare "commodity control number 5D11A" on your export declaration.
  15.  *
  16.  * Type T countries include all countries in the Western Hemisphere except Cuba.
  17.  * Type V countries include all countries in the Eastern Hemisphere except
  18.  * the previous communist block countries and the People's Republic of China,
  19.  * Vietnam, Cambodia, and Laos.
  20.  *
  21.  * For further information, contact the Office of Export Control:
  22.  *
  23.  *    Bureau of Export Administration
  24.  *    P.O. Box 273
  25.  *    Washington, DC 20044
  26.  *    202-377-2694
  27.  */
  28.  
  29. #import <appkit/appkit.h>
  30. #import "Decoder.h"
  31. #import "Registration.h"
  32.  
  33. @implementation Decoder
  34.  
  35. - calc:sender
  36. {
  37.     struct    licenseString    ls;
  38.     char        key[9];
  39.     char         ks[16][8];
  40.     char        *cc = (char *)&ls;
  41.     const char     *keyString = [companyKeyCell stringValue];
  42.  
  43.     if(keyString[0]==0){
  44.         NXRunAlertPanel(0,"You must specify a company key",0,0,0);
  45.         return self;
  46.     }
  47.  
  48.  
  49.     /* Convert to a license token */
  50.     hex_to_binary([licenseStringCell stringValue],&ls,sizeof(ls));
  51.  
  52.     /* Decrypt the token */
  53.     asciiToKey([companyKeyCell stringValue],key);
  54.  
  55.     desinit(0);
  56.     dessetkey(ks,key);
  57.     dedes(ks,cc+2);
  58.     dedes(ks,cc);
  59.  
  60.     if(checksum(&ls,sizeof(ls))){
  61.         [validCell        setStringValue:"Not valid"];
  62.         [productCodeCell     setStringValue:""];
  63.         [licenseTypeCell    setStringValue:""];
  64.         [startDateCell        setStringValue:""];
  65.         [endDateCell        setStringValue:""];
  66.         [accessionNumberCell    setStringValue:""];
  67.         [maxMachinesCell    setStringValue:""];
  68.         return self;
  69.     }
  70.  
  71.     [validCell        setStringValue:"Valid"];
  72.  
  73.     if(ls.flag & REG_SINGLEUSER){
  74.         [licenseTypeCell    setStringValue:"Single user"];
  75.     }
  76.     else if(ls.flag & REG_DEMO){
  77.         [licenseTypeCell    setStringValue:"Demo"];
  78.     }
  79.     else {
  80.         [licenseTypeCell    setStringValue:"Network"];
  81.     }
  82.  
  83.     [productCodeCell     setIntValue:ls.product];
  84.  
  85.     if(ls.flag & REG_START){
  86.         char    buf[256];
  87.  
  88.         sprintf(buf,"%d/%d",(ls.start >> 4),((ls.start) & 0xf) + 92);
  89.         [startDateCell        setStringValue:buf];
  90.     }
  91.     else{
  92.         [startDateCell        setStringValue:""];
  93.     }
  94.  
  95.     if(ls.flag & REG_END){
  96.         char    buf[256];
  97.  
  98.         sprintf(buf,"%d/%d",(ls.end >> 4),((ls.end) & 0xf) + 92);
  99.         [endDateCell        setStringValue:buf];
  100.     }
  101.     else{
  102.         [endDateCell        setStringValue:""];
  103.     }
  104.  
  105.     [accessionNumberCell    setIntValue:
  106.      ls.num[0] << 16 | ls.num[1] << 8 | ls.num[2]];
  107.  
  108.     [maxMachinesCell setIntValue: ls.maxMachines[0] << 8 + ls.maxMachines[1]];
  109.  
  110.     return self;
  111. }
  112.  
  113.  
  114. @end
  115.